perm filename MAP.SAI[1,BGB] blob sn#101482 filedate 1974-05-11 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	COMMENT ENTRY MAPMAK,MAPOUT,SCROLL
C00009 00003	α WINDOWS
C00010 00004		IF MODE THEN
C00012 00005		IF MODE LAND 2 THEN
C00014 00006	α DISPLAY GRID LINES
C00016 00007	IF MODE LAND 2 THEN
C00018 00008	INTERNAL PROCEDURE MAPOUT
C00019 00009	INTERNAL PROCEDURE SCROLL
C00021 ENDMK
C⊗;
COMMENT ENTRY MAPMAK,MAPOUT,SCROLL;
BEGIN	"MAP"
	REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
	REQUIRE "SAITRG[SYS,BGB]" SOURCE_FILE;
	REQUIRE "DD[DD,BGB]" SOURCE_FILE;
PRELOAD_WITH
 .0000000    ,	 .0000000    ,
-22.99979    ,	 .1983643@-3 ,
-9.999536    ,	 24.00117    ,
-35.00020    ,	 24.00084    ,
-712.0187    ,	-443.3171    ,
-691.9509    ,	-422.8889    ,
-497.3859    ,	-520.2375    ,
-488.6137    ,	-495.7614    ,
-366.4894    ,	-154.9892    ,
-190.9379    ,	-471.5671    ,
-178.3295    ,	-494.3053    ,
-245.2496    ,	-373.6192    ,
-188.2198    ,	-277.2269    ,
-360.5054    ,	 23.74415    ,
-35.00002    ,	 349.0006    ,
-22.99968    ,	 349.0002    ,
 326.0002    ,	 .8583069@-4 ,
 68.04084    ,	-319.0442    ,
-66.12744    ,	-400.6094    ,
-81.03539    ,	-377.9573    ,
-32.70698    ,	-334.5225    ,
-34.62691    ,	-325.1313    ,
-94.93315    ,	-315.5374    ,
-112.9524    ,	-334.3569    ,
-107.2662    ,	-368.7936    ,
-81.03539    ,	-377.9573    ,
-228.6772    ,	-198.7850    ,
-225.2093    ,	-218.1996    ,
-9.999530    ,	-299.9990    ,
-.6103516@-4 ,	-300.0000    ,
 163.3915    ,	-251.6002    ,
-143.3514    ,	-100.3745    ,
-206.9260    ,	-179.8771    ,
-248.7328    ,	-174.0623    ,
-270.1300    ,	-169.1523    ,
-296.0756    ,	-128.1069    ,
-225.4402    ,	-90.54885    ,
-262.5410    ,	-19.67216    ,
-257.3356    ,	-19.28266    ,
-235.1683    ,	 106.1126    ,
-201.4372    ,	 113.5536    ,
-248.2218    ,	 112.0019    ,
-252.7818    ,	 103.1024    ,
-262.0469    ,	 106.8675    ,
-282.0767    ,	 22.83371    ,
-292.0447    ,	 23.64030    ,
-302.0428    ,	 23.43554    ,
-321.9830    ,	 19.57827    ,
-327.9778    ,	-59.97264    ,
-332.1181    ,	-57.17142    ,
-337.1169    ,	-57.01620    ,
-347.0000    ,	 24.00042    ,
-339.4767    ,	 92.10479    ,
-335.0025    ,	 88.10585    ,
-329.3224    ,	 89.21445    ,
-309.3915    ,	 92.43884    ,
-298.3050    ,	 165.6742    ,
-276.2897    ,	 153.8287    ,
-277.0167    ,	 178.8179    ,
-234.6786    ,	 184.5172    ,
-196.5484    ,	 194.2015    ,
-179.5380    ,	 210.4702    ,
-169.1679    ,	 198.4892    ,
-157.2133    ,	 207.5492    ,
-134.5305    ,	 220.1497    ,
-141.8876    ,	 232.1902    ,
-124.8248    ,	 242.6234    ,
-142.9540    ,	 251.0708    ,
-139.0740    ,	 259.3903    ,
-149.9487    ,	 264.4620    ,
-177.9614    ,	 227.5139    ,
-205.7761    ,	 203.2610    ,
-229.5678    ,	 244.2995    ,
-237.8086    ,	 197.1925    ,
-257.6296    ,	 194.5243    ,
-251.3819    ,	 208.1616    ,
-264.0584    ,	 216.1807    ,
-34.99987    ,	 323.0004    ,
-22.99999    ,	 323.0008    ,
 300.0008    ,	 .3929138@-3 ,
 299.6896    ,	-15.56232    ,
 284.7106    ,	-14.78171    ,
 283.4387    ,	-29.78943    ,
 174.0408    ,	-18.29135    ,
 117.4829    ,	-550.9601    ,
-249.6434    ,	 310.9497    ,
-781.9525    ,	 14.23944    ,
-707.9570    ,	 15.09746    ,
-93.11935    ,	-368.4996    ,
-98.57252    ,	-330.0892    ,
-34.97943    ,	-330.1192    ,
-257.1021    ,	-161.7186    ,
-215.8161    ,	-206.5051    ,
-155.7823    ,	 205.6606    ;
 REAL ARRAY LOCII[0:93,1:2];
PRELOAD_WITH
4,	5,
5,	7,
4,	6,
28,	29,
77,	78,
14,	15,
58,	59,
60,	61,
64,	93,
63,	93,
64,	65,
68,	69,
70,	71,
73,	74,
39,	41,
37,	38,
31,	33,
26,	32,
82,	83,
34,	35,
79,	80,
67,	68;
  INTEGER ARRAY SEGS[1:22,1:2];
PRELOAD_WITH
7,	9,	8,
6,	10,	8,
9,	12,	11,
10,	18,	8,
19,	20,	84,
20,	21,	90,
21,	22,	2,
22,	23,	89,
23,	24,	11,
24,	25,	88,
27,	28,	2,
29,	30,	0,
17,	18,	84,
12,	13,	2,
80,	82,	81,
33,	34,	91,
26,	27,	92,
16,	17,	0,
78,	79,	1,
15,	16,	1,
76,	77,	3,
65,	67,	66,
61,	63,	62,
69,	70,	85,
71,	73,	72,
59,	60,	72,
56,	58,	57,
74,	76,	75,
55,	56,	40,
13,	14,	3,
46,	55,	87,
44,	46,	45,
43,	44,	0,
41,	43,	42,
38,	39,	0,
35,	37,	36,
48,	50,	49,
48,	47,	86,
47,	54,	87,
52,	54,	53,
51,	52,	3,
50,	51,	2;
  INTEGER ARRAY ARCS[1:42,1:3];
α WINDOWS;
	PRELOAD_WITH 0,0,480,512;	SHORT INTEGER ARRAY DWN[1:4];
	PRELOAD_WITH 0,0,1500,1200;	SHORT REAL ARRAY LWN[1:4];
α PROPERTY LINE;
	PRELOAD_WITH
	-745,-465,	130,-900,	360,-710,
	1170,140,	290,780,	100,870,
	-510,470,	-510,360,	-540,210,
	-595,50,	-625,-30,	-690,-305,
	-705,-360,	-745,-465;
	INTEGER ARRAY PLINE[0:13,1:2];
	INTEGER I,GRID,MODE,GRIDSF;

INTERNAL PROCEDURE MAPMAK;
BEGIN	"MAPMAK"
	SETWND(LWN,DWN);
	IF MODE THEN
BEGIN
α DISPLAY PROPERTY LINE;
	AI(PLINE[0,1],PLINE[0,2]);
	FOR I←1 STEP 1 UNTIL 13 DO
	AV(PLINE[I,1],PLINE[I,2]);

α OUTLINE OF THE BUILDING;
	AI(0,0);
	ARC(138,6*π/7,π/5);
	ARC(258,6*π/7,π/5);
	RADIAL(138,258,π/5);
	RADIAL(138,258,37*π/35);
END;

	IF MODE LAND 1 THEN
BEGIN	"ROAD CENTER"
α DISPLAY THE ENTRY ROAD;
	AI(-730.29,-422.96);
	AV(-493.00,-508.00);
	AI(-366.5,-154.99);
	ARC(375,DMS(484334),-DMS(1094300));
	ARC(375,DMS(214255),-DMS(605925));
	AI(117.32,-550.64);
	ARC(250,DMS(384144),DMS(1020145));
	AI(-245.25,-373.62);
	ARC(125,DMS(1202249),-DMS(605925));
α DISPLAY THE CIRCULAR ROAD;
	AI(-35,24);ARC(312,π/2,π/2);
	AI(-10,24);ARC(337,π/2,π);
	AI(-23,0); ARC(336,π/2,0);
	AI(0,0);ARC(313,-π/2,0);
	AI(-10,-313);AV(0,-313);
	AI(-35,336);AV(-23,336);
α DISPLAY THE PARKING LOT LANES;
	AI(0,0);
	RADIAL(186,313,-DMS(90000));
	RADIAL(186,313,-DMS(510000));
	RADIAL(186,255,π+DMS(844000));
	RADIAL(186,329.17,π+DMS(380000));
	ARC(186,-DMS(1330000),-DMS(90000));
	ARC(255,-DMS(1330000),-DMS(90000));
END	"ROAD CENTER";
	IF MODE LAND 2 THEN
BEGIN	"LAMP ISLANDS"
	REAL ARRAY QQ[1:6];
	REAL DEL,INNER,OUTER,SIGN;
	INTEGER I;
	QQ[1]	←	-DMS(125000);
	QQ[2]	←	-DMS(471000);
	QQ[3]	←	-DMS(545000);
	QQ[4]	←	π + DMS(883000);
	QQ[5]	←	π + DMS(805000);
	QQ[6]	←	π + DMS(415000);
	DEL	←	DMS(5000);
	INNER	←	DMS(1752000);
	OUTER	←	DMS(1814000);
	FOR I←1 STEP 1 UNTIL 6 DO 
BEGIN
	AI(0,0);
	RADIAL(201.82,239.46,QQ[I]-DEL);
	RADIAL(201.82,239.46,QQ[I]+DEL);
	RADIAL(201.94,201.94,QQ[I]);
	ARC(2.94,INNER,QQ[I]+π-INNER/2);
	AI(0,0);
	RADIAL(239.51,239.51,QQ[I]);
	ARC(3.49,-OUTER,QQ[I]+OUTER/2);
END;
	QQ[1]	←	-DMS(133000);
	QQ[2]	←	-DMS(463000);
	QQ[3]	←	-DMS(553000);
	QQ[4]	←	π + DMS(423000);
	INNER	←	DMS(1770000);
	OUTER	←	DMS(870000);
	DEL	←	DMS(13000);
	FOR I←1 STEP 1 UNTIL 4 DO
BEGIN
	AI(0,0);RADIAL(274.18,274.18,QQ[I]);
	ARC(7.18,INNER,QQ[I]+DEL+π/2);
	SIGN	←	(IF I LAND 1 THEN 1 ELSE -1);
	AI(0,0);
	RADIAL(274,289.0  ,QQ[I]-SIGN*DEL);
	IF I=4 THEN DONE;
	RADIAL(274,285.786,QQ[I]+SIGN*DEL);
	RADIAL(285,285,QQ[I]-SIGN*DEL);
	ARC(15,SIGN*OUTER,QQ[I]-SIGN*DEL);
END;
	AI(0,0);
	ARC(175,-DMS(1390000),-DMS(60000));
	ARC(289,-π/6,-π/12);
	ARC(300,-π/6,-π/12);
	ARC(289,DMS(790000),π+DMS(440000));

END	"LAMP ISLANDS";
α DISPLAY GRID LINES;
	IF ¬GRIDSF THEN
BEGIN	"GRID"
	REAL Q,X,Y,XL,XH,YL,YH;
	INTEGER I;
	Q	←	LWN[3]/4;
	GRID	←	IF Q < 1 THEN 1 ELSE
                      	IF Q < 5 THEN 5 ELSE
                      	IF Q < 10 THEN 10 ELSE
                      	IF Q < 25 THEN 25 ELSE
                      	IF Q < 50 THEN 50 ELSE
                      	IF Q < 100 THEN 100 ELSE
                      	IF Q < 200 THEN 200 ELSE
                      	IF Q < 500 THEN 500 ELSE
                      	IF Q < 1000 THEN 1000 ELSE
                      	IF Q < 2000 THEN 2000 ELSE
                      	IF Q < 5280 THEN 5280 ELSE 10560;
	AI(LWN[1],LWN[2]+5);AV(LWN[1],LWN[2]-5);
	AI(LWN[1]-5,LWN[2]);AV(LWN[1]+5,LWN[2]);
α COMPUTE THE GRID WINDOW SO THAT IT LIES ON ABSOLUTE GRID MULTIPLES;
	I	←	LWN[1]/GRID;
	XL	←	(I-3)*GRID;
	XH	←	XL + 6*GRID;
	I	←	LWN[2]/GRID;
	YL	←	(I-3)*GRID;
	YH	←	YL + 6*GRID;
α VERTICALS;
	X	←	XL;
	FOR I←-3 STEP 1 UNTIL 3 DO
BEGIN
	AI(X,YL);
	AV(X,YH);
	X	←	X + GRID;
END;

α HORIZONTALS;
	Y	←	YL;
	FOR I←-3 STEP 1 UNTIL 3 DO
BEGIN
	AI(XL,Y);
	AV(XH,Y);
	Y	←	Y + GRID;
END;
END	"GRID";

IF MODE LAND 2 THEN
BEGIN	"PAVEMENT"
	INTEGER I;
α SEGMENTS;
	FOR I←1 STEP 1 UNTIL 22 DO
BEGIN
	INTEGER P1,P2;
	P1	←	SEGS[I,1];
	P2	←	SEGS[I,2];
	AI(LOCII[P1,1],LOCII[P1,2]);
	AV(LOCII[P2,1],LOCII[P2,2]);
END;

α ARCS;
	FOR I←1 STEP 1 UNTIL 42 DO
BEGIN
	REAL X,Y,X1,Y1,X2,Y2;
	REAL RR,R,A,B;
	INTEGER P1,P2,P3;
	P1	←	ARCS[I,1];
	P2	←	ARCS[I,2];
	P3	←	ARCS[I,3];
	X	←	LOCII[P3,1];
	Y	←	LOCII[P3,2];
	X1	←	LOCII[P1,1]-X;
	Y1	←	LOCII[P1,2]-Y;
	X2	←	LOCII[P2,1]-X;
	Y2	←	LOCII[P2,2]-Y;
	RR	←	X1↑2 + Y1↑2;
	R	←	SQRT(RR);
	A	←	ACOS((X1*X2+Y1*Y2)/RR);
	B	←	ATAN2(Y1,X1);
	A	←	(IF X1*Y2 < X2*Y1 THEN -A ELSE A);
	AI(X,Y);
	ARC(R,A,B);
END;
END	"PAVEMENT";
END	"MAPMAK";

INTERNAL PROCEDURE MAPOUT;
BEGIN	"MAPOUT"
	SHOWDD(0);
	IF ¬GRIDSF THEN BEGIN
	DDSTRC(450,230,0,CVS(GRID)&" FOOT GRID");
	DDSTRC(235,276,0,CVS(LWN[1])&","&CVS(LWN[2]));END;
END	"MAPOUT";
INTERNAL PROCEDURE SCROLL;
BEGIN	"SCROLL"
	LABEL L1,L2;
	DEFINE X="LWN[1]";
	DEFINE Y="LWN[2]";
	DEFINE DX="LWN[3]";
	DEFINE DY="LWN[4]";
	INTEGER CHR,DELPOW;
	MODE	←	1;
	MAPMAK;
	MAPOUT;
L1:	CHR	←	INCHRW;
	IF CHR='175 THEN BEGIN OUTSTR(↓&"*");RETURN;END;
	IF CHR=13 THEN OUTCHR(".") ELSE
	IF CHR="\" THEN DELPOW←(DELPOW-1)MAX 0 ELSE
	IF CHR="/" THEN DELPOW← DELPOW+1 ELSE GO L2;GO L1;
	DEFINE DELTAX="DX/(1 LSH DELPOW)";
	DEFINE DELTAY="DY/(1 LSH DELPOW)";
L2:	IF CHR=":" THEN X←X + DELTAX     ELSE
	IF CHR=";" THEN X←X - DELTAX     ELSE
	IF CHR="(" THEN Y←Y - DELTAY     ELSE
	IF CHR=")" THEN Y←Y + DELTAY     ELSE
	IF CHR="-" THEN BEGIN DX←DX/2;DY←DY/2;END ELSE
	IF CHR="*" THEN BEGIN DX←DX*2;DY←DY*2;END ELSE
	IF CHR="," THEN GRIDSF←¬GRIDSF ELSE
	IF CHR="." THEN MODE←(MODE+1)LAND 3 ELSE GO L1;
	MAPMAK;MAPOUT;
	GO L1;
END	"SCROLL";
	WHILE TRUE DO SCROLL;

END	"MAP";